#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <errno.h> // 全局变量（临界资源），所有库函数都会修改它
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <pthread.h> // POSIX thread

void *routine(void *arg)
{
    *(int *)arg = 200;

    pthread_exit("abcd");
}

int main(int argc, char const *argv[])
{
    pthread_attr_t attr;

    // 将想要的属性加入attr
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

    int a = 100; // 在main主线程的栈

    pthread_t tid;
    pthread_create(&tid, &attr, routine, (void *)&a);

    sleep(1);
    printf("a: %d\n", a);

    void *p;
    int err = pthread_join(tid, &p);
    if(err == 0)
        printf("返回值: %s\n", (char *)p);
    else
        printf("接合失败: %s\n", strerror(err));

    return 0;
}
